#include<bits/stdc++.h> using namespace std; typedef long long LL; typedef unsigned long long ull; int dx[]={1,-1,0,0},dy[]={0,0,1,-1}; typedef pair<int,int>PII; typedef pair<int,__int128>PI; typedef pair<double,double>PDD; typedef pair<LL,LL>PLL; typedef tuple<LL,LL,LL,LL>t4i; typedef tuple<int,int,int>t3i; const long double eps=1e-7; const int inf=0x3f3f3f3f; const long long INF=1e18; const double pai=acos(-1.0); const int mod=1e9+7; const int N=1e5+10,M=2e6+10; mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count()); //__builtin_popcountll(x) LL dp[N],a[N]; int p[5]; void solve() { int n;cin>>n; for(int i=1;i<=n;i++) cin>>a[i],dp[i]=-INF; dp[0]=0; queue<PLL>q; q.push({0,0}); while(q.size()){ auto [ps,nw]=q.front();q.pop(); if(nw<dp[ps]) continue; for(int i=1;i<=4;i++) p[i]=i; do{ LL pos=ps,now=nw; bool ok=true; for(int i=1;i<=4;i++){ LL x=pos+p[i]; if(x<=n&&now+a[x]>=0) dp[x]=max(dp[x],now+a[x]),pos=x,now+=a[x]; else{ ok=false; break; } } if(ok) q.push({pos,now}); }while(next_permutation(p+1,p+5)); } if(dp[n]>=0) printf("%lld\n",dp[n]); else printf("-1\n"); } int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int tt;tt=1; //cin>>tt; while(tt--){ solve(); } return 0; }