#include<iostream>
#include<cstdio>
#include<stack>
using namespace std;
const int maxn=1e5+5;
typedef long long LL;
typedef pair<LL,int>PII;
LL max(LL a,LL b)
{
return a>b?a:b;
}
int main()
{
int n;
LL a[maxn],sum[maxn];
scanf("%d",&n);
sum[0]=0;
int left[maxn],right[maxn];
for(int i=1;i<=n;i++)
{
scanf("%lld",&a[i]);
sum[i]=1l*sum[i-1]+a[i]; //前缀和
left[i]=right[i]=i;
}
a[n+1]=0;
stack<PII>str;
while(!str.empty()) str.pop();
//单调栈,以每一个数作为延伸,记录延伸范围
for(int i=1;i<=n+1;i++)
{
if(str.empty()||a[i]>str.top().first) {
str.push(PII(a[i],i));
}
else {
while(!str.empty()&&a[i]<=str.top().first)
{
PII x=str.top();
str.pop();
left[i]=left[x.second];
right[x.second]=i-1;
}
str.push(PII(a[i],i));
}
}
/*while(!str.empty())
{
PII x=str.top();
str.pop();
right[x.second]=n;
}*/
LL solve=-1;
int l,r;
for(int i=1;i<=n;i++)
{
if(1l*a[i]*(sum[right[i]]-sum[left[i]-1])>solve) {
l=left[i];
r=right[i];
solve=1l*a[i]*(sum[right[i]]-sum[left[i]-1]);
}
}
cout<<solve<<endl<<l<<" "<<r<<endl;
return 0;
}