#include <iostream>
#include <fstream>
#define nmax 100005
using namespace std;
int H[4*nmax], L[4*nmax], R[4*nmax];
void build(int node, int lo, int hi) {
if(lo == hi) {
H[node] = L[node] = R[node] = v[i];
return;
}
int mid = (lo + hi) >> 1;
build(2*node, lo, mid);
build(2*node+1, mid+1, hi);
int a = max(H[2*node], H[2*node+1]);
int b = max(R[2*node], L[2*node+1]);
H[node] = max(a, b);
H[node] = max(H[node], R[2*node] + L[2*node+1]);
L[node] = L[2*node];
if(L[2*node] == suma pe intervalul stang) L[node] = max(L[node], L[2*node]+L[2*node+1]);
R[node] = R[2*node+1];
if(R[2*node+1] == suma pe intervalul drept) R[node] = max(R[node], R[2*node]+R[2*node+1]);
}
int main() {
ifstream f("sequencequery.in");
ofstream g("sequencequery.out");
f>>n;
for(int i=1; i<=n; i++) f>>v[i];
build(1, 1, n);
return 0;
}