#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define mod 1000000007
#define fo(i,n) for(i=0;i<n;i++)
#define Fo(i,k,n) for(i=k;k<n?i<n:i>n;k<n?i+=1:i-=1)
#define pb push_back

typedef pair<int, int>	pii;
typedef pair<int, ll>	pil;
typedef pair<ll, ll>	pl;
typedef vector<int>		vi;
typedef vector<ll>      vl;
typedef vector<pii>		vpii;
typedef vector<pl>		vpl;
typedef vector<vi>		vvi;

int solve(vector <int> arr) {
    //  Return the sum of S(S(A)) modulo 10^9+7.
    int n = arr.size();
    
    vector<int> next_greater(n,0);
    
    stack<int> s;
    int element, next;
    s.push(0);
    for (int i=1; i<n; i++)
    {
        next = i;
        while(!s.empty()){
            int cur = s.top();
            if(arr[cur] < arr[i]){
                next_greater[cur] = i;
                s.pop();
            }
            else break;
        }

        s.push(i);
    }
    while (s.empty() == false)
    {
        element = s.top(); s.pop();
        next_greater[element] = n;
    }
    
    vector<int> r;
    for(int i=0; i<n; i++) r.pb(arr[i]);
    
    for(int k=1; k<n; k++)
    {
        for(int i=0; i<n-k; i++)
        {
            if(arr[i+k]>=r[(k-1)*n+i])
            {
                r.pb(arr[i+k]);
            } 
            else
            {
                r.pb(r[(k-1)*n+i]);
            }
            
        }    
         
    }    
    
    vector<int> r1;
    ll sum = 0;
    for(int i=0; i<r.size(); i++){ r1.pb(r[i]); sum += r[i]; sum %=mod;}
      
    n = r.size();
    
    for(int k=1; k<n; k++)
    {
        for(int i=0; i<n-k; i++)
        {
            if(r[i+k]>=r1[i])
            {
                r1[i] = r[i+k];
               
            } 
             sum += r1[i];
            sum %=mod;
            
        }    
         
    }
    
    
    
    
    return sum;
}

int main() {
    int n;
    cin >> n;
    vector<int> A(n);
    for(int A_i = 0; A_i < n; A_i++){
       cin >> A[A_i];
    }
    int result = solve(A);
    cout << result << endl;
    return 0;
}