#include <iostream>
#include <iomanip>
#include <cmath>
#include <algorithm>
#include <vector>
#include <stack>
#include <queue>
#include <tuple>
#include <string>
#include <list>
using namespace std;

long long min(long long int a,long long int b){
    if(a>b){
        return b;
    }else{
        return a;
    }
}

long long int max(long long int a,long long int b){
    if(a>b){
        return a;
    }else{
        return b;
    }
}

long long modpow(long long a, long long n, long long mod) {
    long long res = 1;
    while (n > 0) {
        if (n & 1) res = res * a % mod;
        a = a * a % mod;
        n >>= 1;
    }
    return res;
}

// a^{-1} mod を計算する
long long modinv(long long a, long long mod) {
    return modpow(a, mod - 2, mod);
}

void f(vector<vector<int>>& a,vector<vector<int>>& b,int N,int K){
    for(int i=0;i<N-1;i++){
        for(int j=i+1;j<N;j++){
            int l=0;
            for(int k=0;k<N;k++){
                if(a[k][i]+a[k][j]>K){
                    break;
                }
                l+=1;
            }
            if(l==N){
                b[i][j]=1;
                b[j][i]=1;
            }
        }
    }
}

void g(vector<vector<int>>& a,vector<vector<int>>& c,int N,int K){
    for(int i=0;i<N-1;i++){
        for(int j=i+1;j<N;j++){
            int l=0;
            for(int k=0;k<N;k++){
                if(a[i][k]+a[j][k]>K){
                    break;
                }
                l+=1;
            }
            if(l==N){
                c[i][j]=1;
                c[j][i]=1;
            }
        }
    }
}

int h(vector<vector<int>>& b,vector<int>& x,int N){
    int M=1;
    vector<int> a(N);
    for(int i=0;i<N;i++){
        a[i]=0;
    }
    stack<int> d;
    for(int i=0;i<N;i++){
        int j=0;
        if(a[i]==0){
            d.push(i);
            a[i]=1;
        }
        while(!d.empty()){
            int k=d.top();
            d.pop();
            j+=1;
            for(int l=0;l<N;l++){
                if(b[k][l]==1 && a[l]==0){
                    d.push(l);
                    a[l]=1;
                }
            }
        }
        if(j>1){
            x.push_back(j);
            M=max(M,j);
        }
    }
    return M;
}


int main(){
    long long int N;
    cin>>N;
    vector<long long int> A(N),B(N+1),C(N+1),D(N+1);
    for(long long int i=0;i<N;i++){
        cin>>A[i];
        B[i]=0LL;
        C[i]=0LL;
    }
    for(long long int i=1;i<N+1;i++){
        B[i]=B[i-1]+A[i-1];
        C[i]=max(C[i-1],B[i]);
    }
    D[0]=0LL;
    long long int ans=0;
    for(long long int i=1;i<N+1;i++){
        D[i]=D[i-1]+B[i];
        ans=max(ans,D[i]);
    }
    for(long long int i=0;i<N;i++){
        ans=max(ans,D[i]+C[i+1]);
    }
    cout<<ans<<endl;
    return 0;
}
#include <bits/stdc++.h>
using namespace std;

int main() {
    int64_t N;
    cin >> N;
    vector<int64_t> A(N);
    for (int i = 0; i < N; i++) {
        cin >> A[i];
    }

    vector<int64_t> B(N);
    int64_t sum = 0;
    for (int i = 0; i < N; i++) {
        sum = sum + A[i];
        B[i] = sum;
    }

    vector<int64_t> C(N);
    int64_t maxC = 0;
    sum = 0;
    for (int i = 0; i < N; i++) {
        sum = sum + A[i];
        if (sum > maxC) {
            maxC = sum;
        }
        C[i] = maxC;
    }

    int64_t max = 0;
    int64_t count = 0;
    for (int i = 0; i < N; i++) {
        if (count + C[i] > max) {
            max = count + C[i];
        }
        count = count + B[i];
    }
    cout << max << endl;
}
