#include<bits/stdc++.h>
using namespace std;
const int MAXN=1e6+5;
const long long INF=1e18;
long long dp[MAXN],A[MAXN],P[MAXN];
double range[MAXN];
stack<int> st;
pair<long long,long long> line[MAXN];
double intersect(pair<long long,long long> a,pair<long long,long long> b)
{
return (double)(b.second-a.second)/(a.first-b.first);
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n,cnt=0,mx=0,pre=0;
cin>>n;
range[0]=-INF,range[1]=INF;
long long ans=0;
for(int i=1;i<=n;i++)
{
cin>>A[i];
if(mx<A[i])
{
mx=A[i];
dp[i]=INF,line[i]={n-i+1,dp[pre]};
while(!st.empty()&&intersect(line[i],line[st.top()])<range[cnt]) st.pop(),cnt--;
if(!st.empty()) range[++cnt]=intersect(line[i],line[st.top()]),range[cnt+1]=INF;
st.push(P[cnt]=i);
int pos=upper_bound(range,range+cnt+1,A[i])-range-1;
ans=dp[i]=min(dp[i],line[P[pos]].first*A[i]+line[P[pos]].second),pre=i;
}
}
cout<<ans;
}