// 2 max sum subarray that don't intersect each other
#include<bits/stdc++.h>
using namespace std;
main(){
int n,mx=0;
cin>>n;
vector<int>v(n),pref(n),suff(n);
for(auto &it:v)cin>>it;
pref[0]=max(0,v[0]);
suff[n-1]=max(0,v[n-1]);
for(int i=1;i<n;i++){
pref[i]=max(v[i],max(pref[i-1]+v[i],0));
}
for(int i=n-2;i>=0;i--){
suff[i]=max(v[i],max(0,v[i]+suff[i+1]));
}
vector<int>prefixmaxsum(n,0);
prefixmaxsum[0]=pref[0];
for(int i=1;i<n;i++)prefixmaxsum[i]=max(prefixmaxsum[i-1],pref[i]);
vector<int>suffixmaxsum(n,0);
suffixmaxsum[n-1]=suff[n-1];
for(int i=n-2;i>=0;i--)suffixmaxsum[i]=max(suffixmaxsum[i+1],suff[i]);
for(int i=0;i<n-1;i++){
mx=max(mx,prefixmaxsum[i]+suffixmaxsum[i+1]);
}
cout<<max(mx,prefixmaxsum[n-1])<<"\n";
}
Ly8gMiBtYXggc3VtIHN1YmFycmF5IHRoYXQgZG9uJ3QgaW50ZXJzZWN0IGVhY2ggb3RoZXIKI2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCm1haW4oKXsKICAgIGludCBuLG14PTA7CiAgICBjaW4+Pm47CiAgICB2ZWN0b3I8aW50PnYobikscHJlZihuKSxzdWZmKG4pOwogICAgZm9yKGF1dG8gJml0OnYpY2luPj5pdDsKICAgIHByZWZbMF09bWF4KDAsdlswXSk7CiAgICBzdWZmW24tMV09bWF4KDAsdltuLTFdKTsKCiAgICBmb3IoaW50IGk9MTtpPG47aSsrKXsKICAgICAgICBwcmVmW2ldPW1heCh2W2ldLG1heChwcmVmW2ktMV0rdltpXSwwKSk7CiAgICB9CgogICAgZm9yKGludCBpPW4tMjtpPj0wO2ktLSl7CiAgICAgICAgc3VmZltpXT1tYXgodltpXSxtYXgoMCx2W2ldK3N1ZmZbaSsxXSkpOwogICAgfQoKICAgIHZlY3RvcjxpbnQ+cHJlZml4bWF4c3VtKG4sMCk7CiAgICBwcmVmaXhtYXhzdW1bMF09cHJlZlswXTsKICAgIGZvcihpbnQgaT0xO2k8bjtpKyspcHJlZml4bWF4c3VtW2ldPW1heChwcmVmaXhtYXhzdW1baS0xXSxwcmVmW2ldKTsKICAgIAogICAgdmVjdG9yPGludD5zdWZmaXhtYXhzdW0obiwwKTsKICAgIHN1ZmZpeG1heHN1bVtuLTFdPXN1ZmZbbi0xXTsKICAgIGZvcihpbnQgaT1uLTI7aT49MDtpLS0pc3VmZml4bWF4c3VtW2ldPW1heChzdWZmaXhtYXhzdW1baSsxXSxzdWZmW2ldKTsKCiAgICBmb3IoaW50IGk9MDtpPG4tMTtpKyspewogICAgICAgIG14PW1heChteCxwcmVmaXhtYXhzdW1baV0rc3VmZml4bWF4c3VtW2krMV0pOwogICAgfQoKICAgY291dDw8bWF4KG14LHByZWZpeG1heHN1bVtuLTFdKTw8IlxuIjsKfQ==