#include<bits/stdc++.h>
using namespace std;
#define N 200005
#define lc p<<1
#define rc p<<1|1
#define LL long long
int a[N];
int n;
struct tree{
int l,r;
LL sum,m_sum,l_sum,r_sum;
}t[N<<2];
void pushup(int p){
t[p].sum=t[lc].sum+t[rc].sum;
t[p].l_sum=max(t[lc].l_sum,t[lc].sum+t[rc].l_sum);
t[p].r_sum=max(t[rc].r_sum,t[rc].sum+t[lc].r_sum);
t[p].m_sum=max({t[lc].m_sum,t[rc].m_sum,t[lc].r_sum+t[rc].l_sum});
}
void build(int p,int l,int r){
t[p]={l,r,0,0,0,0};
if(l==r){
t[p].sum=t[p].l_sum=t[p].r_sum=t[p].m_sum=a[l];
return;
}
int mid=l+r>>1;
build(lc,l,mid);
build(rc,mid+1,r);
pushup(p);
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%d",a+i);
build(1,1,n);
printf("%lld",t[1].m_sum);
return 0;
}