#include<stdio.h>
int Maxsubsequence(int list[],int left,int right);
int Max(int A,int B,int C);
int main(){
int n;scanf("%d",&n);
int list[n];
int i;for(i=0;i<n;i++){scanf("%d",&list[i]);}
int left=0,right=n-1;
int max=Maxsubsequence(list,left,right);printf("%d",max);return0;}
int Max(int A,int B,int C){returnA>B?A>C?A:C:B>C?B:C;}
int Maxsubsequence(int list[],int left,int right){
int loc,i;
int leftsubmax,rightsubmax;if(left==right){if(list[left]<0){return0;}elsereturn list[left];}
loc=(left+right)/2;
leftsubmax=Maxsubsequence(list,left,loc);
rightsubmax=Maxsubsequence(list,loc+1,right);
int leftsum=0,rightsum=0;
int leftmax=0,rightmax=0;for(i=loc;i>=left;i--){
leftsum+=list[i];if(leftsum>leftmax){
leftmax=leftsum;}}for(i=loc+1;i<=right;i++){
rightsum+=list[i];if(rightsum>rightmax){
rightmax=rightsum;}}returnMax(leftsubmax,rightsubmax,leftmax+rightmax);}