#include <bits/stdc++.h>
using namespace std;
//不是递增的话就删掉,然后重新计算一次
int getMaxArea(vector<int> &vec)
{
stack<int> s;
int max_area = 0;
int i=0;
int tp,area_with_top;
while(i < vec.size()){
if(s.empty() || vec[s.top()] <= vec[i])//栈是空的时候,或者栈顶元素小于当前vector所出的元素
s.push(i++);
else
{
tp = s.top();
s.pop();
area_with_top = vec[tp]*(s.empty()? i:i-s.top()-1);
max_area = max(max_area,area_with_top);
}
}
while(!s.empty())
{
tp = s.top();
s.pop();
area_with_top = vec[tp] * (s.empty() ? i : i-s.top()-1);
max_area = max(max_area, area_with_top);
}
return max_area;
}
int main(){
int N;
vector<int> vec;
cin>>N;
for(int i=0;i<N;++i)
{
int val;
cin>>val;
vec.emplace_back(val);
}
cout << getMaxArea(vec);
return 0;
}