#include <iostream>
#include <algorithm>
using namespace std;
void naprawTablice();
long long a[100002] = {};
long long sumy[100002] = {};
int temp=0;
int main()
{
int n;
cin>>n;
for (int x=0; x!=n; x++) cin>>a[x];
for (int x=0; x<n;){ //sumowanie wszystkich liczb obok siebie z tym samym znakiem
if(a[x]<0){
while(a[x]<=0 && x!=n){
sumy[temp]+=a[x];
x++;
}
temp++;
}
else{
while(a[x]>=0 && x!=n){
sumy[temp]+=a[x];
x++;
}
temp++;
}
}
//usuniecie minusowych z początka i końcu, bo odrzucamy to na 100%
if(sumy[0]<0)sumy[0]=0;
if(sumy[temp-1]<0)sumy[temp-1]=0;
naprawTablice();
if(temp<3) cout<<sumy[0]; //jesli temp<3 po usunieciu liczb ujemnych z poczatka i konca, to na 100% jest tylko jedna liczba dodatnia
else{
for (int x=0; x<temp-2 && temp!=1; x+=2){
if(sumy[x]+sumy[x+1]+sumy[x+2]>=max(sumy[x], sumy[x+2])) {
sumy[x]=sumy[x]+sumy[x+1]+sumy[x+2];
sumy[x+1]=0;
sumy[x+2]=0;
naprawTablice();
x=-2; //zeby bylo zero po skonczeniu cyklu
}
//for (int g=0; g!=temp; g++) cout<<sumy[g]<<endl; cout<<endl;
}
cout<<*max_element(sumy, sumy+temp); //wypisujemy najwieksza mozliwa wartosc
}
return 0;
}
void naprawTablice(){ //czysczenie tablicy z zer
bool zmiana=0;
do{
zmiana=0;
for (int x=0; x<temp-1; x++){
if(x>=temp) x=0;
if(sumy[x]==0){
for (int y=x; y!=temp-1; y++) sumy[y]=sumy[y+1];
temp--;
zmiana=1;
}
}
if(sumy[temp-1]==0) temp--;
}while(zmiana==1);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YWxnb3JpdGhtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnZvaWQgbmFwcmF3VGFibGljZSgpOwoKbG9uZyBsb25nIGFbMTAwMDAyXSA9IHt9Owpsb25nIGxvbmcgc3VteVsxMDAwMDJdID0ge307CmludCB0ZW1wPTA7CgppbnQgbWFpbigpCnsKICAgIGludCBuOwogICAgY2luPj5uOwogICAgZm9yIChpbnQgeD0wOyB4IT1uOyB4KyspIGNpbj4+YVt4XTsKCiAgICBmb3IgKGludCB4PTA7IHg8bjspeyAvL3N1bW93YW5pZSB3c3p5c3RraWNoIGxpY3piIG9ib2sgc2llYmllIHogdHltIHNhbXltIHpuYWtpZW0KICAgICAgICBpZihhW3hdPDApewogICAgICAgICAgICB3aGlsZShhW3hdPD0wICYmIHghPW4pewogICAgICAgICAgICAgICAgc3VteVt0ZW1wXSs9YVt4XTsKICAgICAgICAgICAgICAgIHgrKzsKICAgICAgICAgICAgfQogICAgICAgICAgICB0ZW1wKys7CgogICAgICAgIH0KICAgICAgICBlbHNlewogICAgICAgICAgICB3aGlsZShhW3hdPj0wICYmIHghPW4pewogICAgICAgICAgICAgICAgc3VteVt0ZW1wXSs9YVt4XTsKICAgICAgICAgICAgICAgIHgrKzsKICAgICAgICAgICAgfQogICAgICAgICAgICB0ZW1wKys7CgogICAgICAgIH0KICAgIH0KCiAgICAvL3VzdW5pZWNpZSBtaW51c293eWNoIHogcG9jesSFdGthIGkga2/FhGN1LCBibyBvZHJ6dWNhbXkgdG8gbmEgMTAwJQogICAgaWYoc3VteVswXTwwKXN1bXlbMF09MDsKICAgIGlmKHN1bXlbdGVtcC0xXTwwKXN1bXlbdGVtcC0xXT0wOwoKICAgIG5hcHJhd1RhYmxpY2UoKTsKCiAgICBpZih0ZW1wPDMpIGNvdXQ8PHN1bXlbMF07IC8vamVzbGkgdGVtcDwzIHBvIHVzdW5pZWNpdSBsaWN6YiB1amVtbnljaCB6IHBvY3phdGthIGkga29uY2EsIHRvIG5hIDEwMCUgamVzdCB0eWxrbyBqZWRuYSBsaWN6YmEgZG9kYXRuaWEKICAgIGVsc2V7CiAgICAgICAgZm9yIChpbnQgeD0wOyB4PHRlbXAtMiAmJiB0ZW1wIT0xOyB4Kz0yKXsKICAgICAgICAgICAgaWYoc3VteVt4XStzdW15W3grMV0rc3VteVt4KzJdPj1tYXgoc3VteVt4XSwgc3VteVt4KzJdKSkgewogICAgICAgICAgICAgICAgc3VteVt4XT1zdW15W3hdK3N1bXlbeCsxXStzdW15W3grMl07CiAgICAgICAgICAgICAgICBzdW15W3grMV09MDsKICAgICAgICAgICAgICAgIHN1bXlbeCsyXT0wOwogICAgICAgICAgICAgICAgbmFwcmF3VGFibGljZSgpOwogICAgICAgICAgICAgICAgeD0tMjsgLy96ZWJ5IGJ5bG8gemVybyBwbyBza29uY3plbml1IGN5a2x1CiAgICAgICAgICAgIH0KICAgICAgICAvL2ZvciAoaW50IGc9MDsgZyE9dGVtcDsgZysrKSBjb3V0PDxzdW15W2ddPDxlbmRsOyBjb3V0PDxlbmRsOwogICAgICAgIH0KCiAgY291dDw8Km1heF9lbGVtZW50KHN1bXksIHN1bXkrdGVtcCk7IC8vd3lwaXN1amVteSBuYWp3aWVrc3phIG1vemxpd2Egd2FydG9zYwoKICAgIH0KICAgIHJldHVybiAwOwp9Cgp2b2lkIG5hcHJhd1RhYmxpY2UoKXsgLy9jenlzY3plbmllIHRhYmxpY3kgeiB6ZXIKCiAgICBib29sIHptaWFuYT0wOwogICAgZG97CiAgICB6bWlhbmE9MDsKICAgIGZvciAoaW50IHg9MDsgeDx0ZW1wLTE7IHgrKyl7CiAgICAgICAgaWYoeD49dGVtcCkgeD0wOwogICAgICAgIGlmKHN1bXlbeF09PTApewogICAgICAgICAgICBmb3IgKGludCB5PXg7IHkhPXRlbXAtMTsgeSsrKSBzdW15W3ldPXN1bXlbeSsxXTsKICAgICAgICAgICAgdGVtcC0tOwogICAgICAgICAgICB6bWlhbmE9MTsKICAgICAgICB9CiAgICB9CgogICAgaWYoc3VteVt0ZW1wLTFdPT0wKSB0ZW1wLS07CiAgICB9d2hpbGUoem1pYW5hPT0xKTsKfQo=