#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;
}