#include <cstdio>
#include <deque>
#include <set>
#include <string>
#include <map>
#include <vector>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <queue>
using namespace std;
typedef long long LL;
#define Debug(x) (cerr << #x << " = " << (x) << endl)
#define Debug2(x, y) (cerr << #x << " = " << (x) << ", " << #y << " = " << (y) << endl)
template<class T> inline T& RD(T &x){
char c; for (c = getchar(); c < '0'; c = getchar()); x = c - '0'; for (c = getchar(); '0' <= c && c <= '9'; c = getchar()) x = x * 10 + c - '0';
return x;
}
const int inf = 0x3f3f3f3f;
const int maxn = 100005;
LL a[maxn];
LL s[maxn];
int R[maxn];
int L[maxn];
int main(){
int n;
while(~scanf("%d",&n)){
s[0] = 0;
for(int i=1;i<=n;i++){
scanf("%lld",&a[i]);
s[i] = s[i-1] + a[i];
}
LL _max = 0;
R[n] = n + 1;
for(int i=n-1;i>0;i--){
int now = i + 1;
while(a[now] >= a[i] && now != n+1){
now = R[now];
}
R[i] = now;
}
L[1] = 0;
for(int i=2;i<=n;i++){
int now = i - 1;
while(a[now] >= a[i] && now != 0){
now = L[now];
}
L[i] = now;
}
for(int i=1;i<=n;i++){
int l=i-1,r=i+1;
_max = max(_max, a[i]*(s[R[i]-1]-s[L[i]]));
}
printf("%lld\n", _max);
}
return 0;
}