#include <bits/stdc++.h>
#define rep(i,n) for (ll i = 0; i < n; ++i)
using namespace std;
using ll = long long;

int main(){
    ll n;
    cin >> n;
    vector<ll> a(n);
    vector<ll> p(n);
    vector<ll> q(n);
    rep(i,n){
        cin >> a[i];
        if(i==0){
            p[i] = a[i];
            q[i] = p[i];
        }else{
            p[i] = p[i-1] + a[i];
            q[i] = max(q[i-1],p[i]);
        }
        
    }
    ll x = 0;
    ll ans=0;
    rep(i,n){
        ans = max(x+q[i], ans);
        x = x + p[i];
    }
    cout << ans << endl;

    return 0;
}
#define _DEBUG
#include "bits/stdc++.h"
#define CHOOSE(a) CHOOSE2 a
#define CHOOSE2(a0,a1,a2,a3,a4,x,...) x
#define debug_1(x1) cout<<#x1<<": "<<x1<<endl
#define debug_2(x1,x2) cout<<#x1<<": "<<x1<<", "#x2<<": "<<x2<<endl
#define debug_3(x1,x2,x3) cout<<#x1<<": "<<x1<<", "#x2<<": "<<x2<<", "#x3<<": "<<x3<<endl
#define debug_4(x1,x2,x3,x4) cout<<#x1<<": "<<x1<<", "#x2<<": "<<x2<<", "#x3<<": "<<x3<<", "#x4<<": "<<x4<<endl
#define debug_5(x1,x2,x3,x4,x5) cout<<#x1<<": "<<x1<<", "#x2<<": "<<x2<<", "#x3<<": "<<x3<<", "#x4<<": "<<x4<<", "#x5<<": "<<x5<<endl
#ifdef _DEBUG
#define debug(...) CHOOSE((__VA_ARGS__,debug_5,debug_4,debug_3,debug_2,debug_1,~))(__VA_ARGS__)
#else
#define debug(...)
#endif
#define rep(index,num) for(int index=0;index<(int)num;index++)
#define rep1(index,num) for(int index=1;index<=(int)num;index++)
#define brep(index,num) for(int index=(int)num-1;index>=0;index--)
#define brep1(index,num) for(int index=(int)num;index>0;index--)
#define scan(argument) cin>>argument
#define prin(argument) cout<<argument<<endl
#define kaigyo cout<<endl
#define eps 1e-7
#define mp(a1,a2) make_pair(a1,a2)
#define ALL(a) (a).begin(),(a).end()
#define rALL(a) (a).rbegin(),(a).rend()
typedef long long ll;
typedef long double ld;
using namespace std;
typedef pair<ll,ll> pll;
typedef pair<int,int> pint;
typedef vector<int> vint;
typedef vector<ll> vll;
typedef vector<pint> vpint;
typedef vector<pll> vpll;
template<class T> bool chmax(T &a, const T &b) { if (a<b) { a=b; return 1; } return 0; }
template<class T> bool chmin(T &a, const T &b) { if (a>b) { a=b; return 1; } return 0; }
ll INFl=(ll)1e+18+1;
int INF=1e+9+1;
ll A[200001];
ll rui[200001]={};
ll ruimax[200001]={};
ll ruirui[200001]={};
int main(){
	int N;
	scan(N);
	rep(i,N) scan(A[i]);
	rep(i,N) rui[i+1]=rui[i]+A[i];
	rep(i,N) ruirui[i+1]=ruirui[i]+rui[i+1];
	rep(i,N) ruimax[i+1]=max(ruimax[i],rui[i+1]);
	ll ruiruimax=-INFl;
	int ruiruimaxindex=0;
	rep1(i,N){
		if(ruiruimax<ruirui[i]){
			ruiruimax=ruirui[i];
			ruiruimaxindex=i;
		}
	}
	if(N==1){
		prin(max(0LL,A[0]));
		return 0;
	}
	if(ruiruimaxindex<=1){
		prin(max({0LL,A[0],A[0]+A[0],A[0]+A[0]+A[1]}));
		return 0;
	}
	ll ans=ruirui[ruiruimaxindex-2];
	ll now=ans;
	rep(i,ruiruimaxindex-1){
		now+=A[i];
		chmax(ans,now);
	}
	rep(i,ruiruimaxindex){
		now+=A[i];
		chmax(ans,now);
	}
	if(ruiruimaxindex<N){
		rep(i,ruiruimaxindex+1){
			now+=A[i];
			chmax(ans,now);
		}
	}
	prin(ans);
	return 0;
}
