//单调栈
//作用:求左边或者右边第一个比它大或小的数。
/*
给一个直方图,求直方图中的最大矩形的面积
分析:枚举的一定是各个矩形的高。
*/
#include<bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10;
int n;
int h[N];
int l[N];
int r[N];
int main(){
cin>>n;
for(int i = 1; i <= n ; i ++ ){
cin >> h[i];
}
stack<int> s;
for(int i = 1;i <= n;i ++ ){
while(!s.empty() && h[s.top()] >= h[i]) s.pop();
if(!s.empty()) l[i] = s.top() + 1;
else l[i] = 1;
s.push(i);
}
reverse(h + 1,h + n +1);//逆序。
while(s.size()) s.pop();//清空。
for(int i = 1;i <= n; i ++ ){
while(!s.empty() && h[s.top()] >= h[i]) s.pop();
if(!s.empty()) r[n - i + 1] = n - s.top();
else r[n - i + 1] = n;
s.push(i);
}
reverse(h + 1,h + n + 1);
long long ans = 0;
for(int i = 1;i <= n; i ++ ){
ans = max(ans , 1ll*(r[i] - l[i] + 1) * h[i]);//1 ll 防爆。
}
cout << ans << endl;
}