#include #define MAX 10000000 using namespace std; int B[MAX]; int C[MAX]; int max1(int A[], int i ,int j, int x, int n, int l){ if(i==j) return A[i]; if(i==j-1) return max(A[i],A[j]); else return max(B[x+i-l], B[x+i+1-l]); } int max2(int i ,int j, int x, int n, int l){ if(i==j) return B[i]; if(i==j-1) return max(B[i],B[j]); else return max(C[x+i-l], C[x+i+1-l]); } int solve(int A[], int n) { int x=0;int l=0; for(int k=0; k <= n-1; k++){ int i=0; for(; i <= n-k-1; i++){ int j=i+k; B[x+i]=max1(A,i,j,x,n,l); } l=i; x=x+n-k; } n=n*(n+1)/2; x=0;l=0;long long sum=0; for(int k=0; k <= n-1; k++){ int i=0; for(; i <= n-k-1; i++){ int j=i+k; C[x+i]=max2(i,j,x,n,l); sum=sum+C[x+i]%(1000000007); } l=i; x=x+n-k; } return sum; } int main() { int n; cin >> n; int A[n]; for(int a_i = 0; a_i < n; a_i++){ cin >> A[a_i]; } int result=solve(A,n); cout << result << endl; return 0; }