← Home
package main

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

const MOD int64 = 1000000007

func modPow(a, e int64) int64 {
	res := int64(1)
	a %= MOD
	for e > 0 {
		if e&1 == 1 {
			res = (res * a) % MOD
		}
		a = (a * a) % MOD
		e >>= 1
	}
	return res
}

func modInv(a int64) int64 {
	return modPow(a, MOD-2)
}

func main() {
	in := bufio.NewReader(os.Stdin)
	var n int
	if _, err := fmt.Fscan(in, &n); err != nil {
		return
	}
	a := make([]int64, n)
	var N int64 = 0
	var maxA int64 = 0
	for i := 0; i < n; i++ {
		var x int64
		fmt.Fscan(in, &x)
		a[i] = x
		N += x
		if x > maxA {
			maxA = x
		}
	}

	if N <= 1 {
		fmt.Println(0)
		return
	}

	
	mx := int(maxA)
	hPref := make([]int64, mx)
	var sum int64 = 0
	for j := 1; j <= mx-1; j++ {
		den := (N%MOD - int64(j)) % MOD
		if den < 0 {
			den += MOD
		}
		inv := modInv(den)
		sum += inv
		if sum >= MOD {
			sum -= MOD
		}
		hPref[j] = sum
	}

	inv2 := (MOD + 1) / 2
	Nm := N % MOD

	
	fN := ((N - 1) % MOD) * ((N - 2) % MOD) % MOD
	fN = fN * inv2 % MOD

	
	cN2 := N % MOD * ((N - 1) % MOD) % MOD * inv2 % MOD
	var sumC int64 = 0
	for i := 0; i < n; i++ {
		ai := a[i] % MOD
		if a[i] >= 2 {
			val := ai * ((a[i] - 1) % MOD) % MOD * inv2 % MOD
			sumC += val
			if sumC >= MOD {
				sumC -= MOD
			}
		}
	}
	deltaS := cN2 - sumC
	if deltaS < 0 {
		deltaS += MOD
	}

	
	var sumF int64 = 0
	twoN := (2 * Nm) % MOD
	N2 := (Nm * Nm) % MOD
	for i := 0; i < n; i++ {
		k := a[i]
		if k <= 1 {
			continue
		}
		km := k % MOD
		
		t1 := ((k - 1) % MOD) * ((twoN - km - 2) % MOD) % MOD
		if t1 < 0 {
			t1 += MOD
		}
		t1 = t1 * inv2 % MOD
		
		C := (((((k+1)%MOD)*Nm)%MOD - N2) % MOD - km) % MOD
		if C < 0 {
			C += MOD
		}
		
		Hdiff := hPref[k-1]
		val := (t1 + C*Hdiff%MOD) % MOD
		sumF += val
		if sumF >= MOD {
			sumF -= MOD
		}
	}

	ans := (deltaS + fN - sumF) % MOD
	if ans < 0 {
		ans += MOD
	}
	fmt.Println(ans)
}