import java.io.*; import java.util.*; import java.text.*; import java.math.*; import java.util.regex.*; public class Solution { /* NOT yet optimized at all */ public static List getMaxTransform(int[] A) { List B = new ArrayList<>(); for (int k = 0, lenA = A.length; k < lenA; k++) { for (int i = 0, iLen = lenA - k; i < iLen; i++) { int j = i + k; int curMax = A[i]; for (int aIdx = i + 1; aIdx <= j; aIdx++) { if (A[aIdx] > curMax) { curMax = A[aIdx]; } } B.add(curMax); } } return B; // Return the sum of S(S(A)) modulo 10^9+7. } public static List getMaxTransform(List A) { return getMaxTransform(A.stream().mapToInt(i -> i).toArray()); } public static int solve(int[] A) { int sum = 0; for (int curNum : getMaxTransform(getMaxTransform(A))) { sum += curNum; } return (int) (sum % (Math.pow(10, 9) + 7)); // Return the sum of S(S(A)) modulo 10^9 +7. } 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(); } }