#include <bits/stdc++.h>
#define fi first
#define se second
#define mp make_pair

using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const double eps = 1e-8;
const int NINF = 0xc0c0c0c0;
const int INF = 0x3f3f3f3f;
const ll mod  = 1e9 + 7;
const ll N = 1e6 + 5;

int main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int n;cin>>n;
    ll ans=0,mx=0,s=0,k=0;
    for(int i=1;i<=n;i++){
        ll x;cin>>x;
        s+=x;
        k=max(k,s);
        ans+=k;
        mx=max(ans,mx);
        ans+=s-k;
        // cout<<ans<<" "<<s<<'\n';
    }
    cout<<mx<<'\n';
    return 0;
}
#include<bits/stdc++.h>

#define rep(i,N) for(int i=0;i<N;i++)
#define rep2(i,N) for(int i=1;i<=N;i++)
using namespace std;
long long  INF=1e18;
long long mod=1e9+7;

//status unsolved
int main(){
    long long n;
    cin>>n;

    long long a[n];
    rep(i,n){
        cin>>a[i];
    }
    long long s[n+1];
    s[0]=0;
    long long M[n+1];//M[i]:=i番目までの累積和の最大
    M[0]=0;
    rep(i,n){
        s[i+1]=s[i]+a[i];
        if(s[i+1]>M[i]){
            M[i+1]=s[i+1];
        }
        else{
            M[i+1]=M[i];
        }
    }
    long long ans=0;
    long long now=0;
    rep2(i,n){
        ans=max(now+M[i],ans);
        now+=s[i];
        //ans=max(now,ans);
        
        //cout<<ans<<endl;
    }
    cout<<ans<<endl;

}
/*


*/
