import java.io.*; import java.util.*; import java.text.*; import java.math.*; import java.util.regex.*; public class Solution { int data; Solution next; static int solve(int[] A) { int n = A.length; int S[] = calculateS(A); // Return the sum of S(S(A)) modulo 10^9+7. int result1 = 0; //System.out.println(" Array"); for(int i = 0; i < S.length; i++) { result1 += S[i]; //System.out.print(S[i]+" "); } //System.out.println(""); int SS[] = calculateS(S); //System.out.println(SS[0]); Long result = Long.parseLong(0+""); for(int i = 0; i < SS.length; i++) { result += Long.parseLong(SS[i]+""); //System.out.print(SS[i]+" "); } result = result % Long.parseLong(1000000007+""); result1 = Integer.parseInt(result+""); return result1; } static int[] calculateS(int[] A) { int n = A.length; int counter = 0; Solution s = null; for(int k = 0; k < n; k++) { for(int i = 0; i < n-k; i++) { int j = i+k; //System.out.println(i+" "+j); s = insert(max(A,i,j),s); //System.out.println(s.data); counter++; } } //System.out.println(""); int A1[] = new int[counter]; int i = 0; while(s != null) { A1[i] = s.data; //System.out.print(s.data+" "); i++; s = s.next; } counter = 0; return A1; } static Solution insert(int max, Solution s) { Solution temp = s; if( s == null) { s = new Solution(); s.data = max; s.next = null; //System.out.println("First loop "+s.data); } else { while(temp.next != null) { //System.out.println("Inside loop "+temp.data); temp = temp.next; } temp.next = new Solution(); temp.next.data = max; temp.next.next = null; //System.out.println("Adding "+temp.next.data); /*Solution tr = s; while(tr != null) { System.out.print(tr.data +" "); tr = tr.next; } System.out.println(""); */ } return s; } static int max(int A[], int i, int j) { int m = A[i]; for(int l = i+1; l <= j; l++) { if(A[l] > m) { m = A[l]; } } return m; } public static void main(String[] args) { Scanner in = new Scanner(System.in); int n = in.nextInt(); int[] a = new int[n]; for(int a_i = 0; a_i < n; a_i++){ a[a_i] = in.nextInt(); } int result = solve(a); System.out.println(result); in.close(); } }