using System; using System.Collections.Generic; using System.IO; using System.Linq; class Solution { static int F(int n) { if (n.Equals(1)) { return 1; } return F(n - 1) + n; } static int[] S(int[] v) { int [] result = new int[F(v.Length)]; int pos = 0; for (int k = 0; k < v.Length; k++) { for (int i = 0; i < v.Length - k; i++) { int j = k + i; int biggest = v[i]; for (int temp = i + 1; temp <= j; temp++) { if (v[temp] > biggest) { biggest = v[temp]; } } result[pos] = biggest; pos++; } } return result; } static int solve(int[] x) { int[] v = S(x); int result = 0; for (int k = 0; k < v.Length; k++) { for (int i = 0; i < v.Length - k; i++) { int j = k + i; int biggest = v[i]; for (int temp = i + 1; temp <= j; temp++) { if (v[temp] > biggest) { biggest = v[temp]; } } result += biggest; } } return (result%1000000007); } static void Main(String[] args) { int n = Convert.ToInt32(Console.ReadLine()); string[] a_temp = Console.ReadLine().Split(' '); int[] x = Array.ConvertAll(a_temp,Int32.Parse); int result = solve(x); Console.WriteLine(result); } }