#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; }