#include<cstdio>
inline int max(int a,int b){return a>b?a:b;}
using namespace std;
int a[300000];
int n;
const int minn = -19260817;
int dp(int l,int r){
if(l==r) return a[l];
int sum=0,left=minn,right=minn;
int mid = ( l + r ) >> 1;
for(int i=mid;i>=1;i--){
sum+=a[i];
left=max(left,sum);
}
sum=0;
for(int i=mid+1;i<=r;i++){
sum+=a[i];
right=max(right,sum);
}
return max(max(dp(l,mid),dp(mid+1,r)),right+left);
}
int main() { // 以下主函数
scanf("%d", &n );
for( int i = 1 ; i <= n ; i++ ) {
scanf("%d" , &a[i] );
}
printf("%d" , dp(1 , n) );
return 0;
}