← Home
package main

import (
	"bufio"
	"fmt"
	"os"
)

func main() {
	reader := bufio.NewReader(os.Stdin)
	var n int
	fmt.Fscan(reader, &n)

	h := make([]int64, n)
	for i := 0; i < n; i++ {
		fmt.Fscan(reader, &h[i])
	}

	const mod = 1000000007

	ans := int64(0)
	for i := 0; i < n; i++ {
		ans = (ans + (h[i] - 1)) % mod
	}

	if n > 1 {
		A := make([]int64, n-1)
		for i := 0; i < n-1; i++ {
			c1 := h[i] - 1
			c2 := h[i+1] - 1
			if c1 < c2 {
				A[i] = c1
			} else {
				A[i] = c2
			}
		}

		W := make([]int64, n-2)
		for i := 0; i < n-2; i++ {
			if A[i] < A[i+1] {
				W[i] = A[i]
			} else {
				W[i] = A[i+1]
			}
		}

		S := int64(0)
		for j := 0; j < n-1; j++ {
			if j == 0 {
				S = A[0] % mod
			} else {
				S = (S*(W[j-1]%mod)%mod + A[j]%mod) % mod
			}
			ans = (ans + S*(A[j]%mod)%mod) % mod
		}
	}

	fmt.Println(ans)
}