#include<cstdio>
#include<algorithm>
using namespace std;
#define N 6000001
#define INFINIT ((1<<31)-1)
int a[N],suf,pre,i,bestpre,bestsuf,bestr,bestl;
int p1,p2,aux;
int getMaxSubsequence(int l,int r,int &pos1,int &pos2)
{
if(l==r)
return a[l];
int mid=(l+r)/2;
int pl1,pl2,pr1,pr2;
bestl=getMaxSubsequence(l,mid,pl1,pl2);
bestr=getMaxSubsequence(mid+1,r,pr1,pr2);
suf=pre=0;
int raw=INFINIT;
bestsuf=bestpre=-INFINIT;
for(i=mid;i>=l;--i)
{
suf+=a[i];
if(bestsuf<suf)
{bestsuf=suf;p1=i;}
}
for(i=mid+1;i<=r;++i)
{
pre+=a[i];
if(bestpre<pre)
{bestpre=pre;p2=i;}
}
if(bestr>bestl)
if(bestr>bestpre+bestsuf)
pos1=pr1,pos2=pr2;//salvam indicii din bestr
else pos1=p1,pos2=p2;//salvam indicii din suf si pre
else if(bestl>bestpre+bestsuf)
pos1=pl1,pos2=pl2;//salvam indicii din bestl
else if(bestl==bestpre+bestsuf)
{
if(pl1<p1)
pos1=pl1,pos2=pl2;
else if(pl1==p1 && pl2-pl1<p2-p1)
pos1=pl1,pos2=pl2;
else pos1=p1,pos2=p2;
}
else pos1=p1,pos2=p2;
return max(bestr,max(bestl,bestpre+bestsuf));
}
int main()
{
FILE *f=freopen("ssm.in","r",stdin),
*g=freopen("ssm.out","w",stdout);
int pos1,pos2,n;
scanf("%d",&n);
for(i=0;i<n;++i)
scanf("%d",&a[i]);
int finalV=getMaxSubsequence(0,n-1,pos1,pos2);
printf("%d %d %d" ,finalV,pos1+1,pos2+1);
}