#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
int mx[N<<3],lz[N<<3],a[N<<1],n,ans;
void build(int rt,int l,int r){
if(l==r){
mx[rt]=a[l];
return ;
}
int mid=(l+r)>>1;
build(rt<<1,l,mid);
build(rt<<1|1,mid+1,r);
mx[rt]=max(mx[rt<<1],mx[rt<<1|1]);
}
void lzdn(int rt){
lz[rt<<1]+=lz[rt];
lz[rt<<1|1]+=lz[rt];
mx[rt<<1]-=lz[rt];
mx[rt<<1|1]-=lz[rt];
lz[rt]=0;
}
void qjj(int rt,int l,int r,int fl,int fr,int v){
if(fl<=l && r<=fr){
lz[rt]+=v;
mx[rt]-=v;
return ;
}
if(lz[rt]) lzdn(rt);
int mid=(l+r)>>1;
if(fl<=mid) qjj(rt<<1,l,mid,fl,fr,v);
if(mid<fr) qjj(rt<<1|1,mid+1,r,fl,fr,v);
mx[rt]=max(mx[rt<<1],mx[rt<<1|1]);
}
int qmx(int rt,int l,int r,int fl,int fr){
if(fl<=l && r<=fr) return mx[rt];
int mid=(l+r)>>1,res=0;
if(lz[rt]) lzdn(rt);
if(fl<=mid) res=max(res,qmx(rt<<1,l,mid,fl,fr));
if(mid<fr) res=max(res,qmx(rt<<1|1,mid+1,r,fl,fr));
return res;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
a[i+n]=a[i];
}
build(1,1,n+n);
for(int i=n/2+1;i<=n/2+1+n;i++){
int l=i-n/2,r=i+n/2-1;
qjj(1,1,n+n,l,i-1,-1);
qjj(1,1,n+n,i,i,1);
qjj(1,1,n+n,i+1,r,-1);
ans=max(ans,max(qmx(1,1,n+n,l,i-1),qmx(1,1,n+n,i+1,r))+a[i]);
}
cout<<ans;
return 0;
}