import math
MOD = 10**9+7
import numpy as np
N = int(input())
X = list(map(int,input().split()))
cumsum = np.cumsum(X[::-1]) # cumsum[i] Xの右からi+1個の和
cumsum_mod = [0]*N
for i in range(N):
    if i == 0:
        cumsum_mod[0] = X[-1]%MOD
    else:
        cumsum_mod[i] = (cumsum_mod[i-1] + X[-i-1])%MOD

fact_mod = [0]*N # fact_mod[i]がiの階乗をMODで割ったものを表す
fact_mod[1] = 1
for i in range(2,N):
    fact_mod[i] = (fact_mod[i-1] * i ) % MOD
#print(cumsum) # overflow


newans = 0
P = 10**9 + 7
inv_t = [0]+[1]
for i in range(2,N):
    inv_t += [inv_t[P % i] * (P - int(P / i)) % P]

# print(fact_mod)
# print(cumsum_mod)
# print(inv_t)

# TODO 累積和のオーバーフロー改善
for i in range(1,N):
    #temp = ((cumsum[i]-X[-i-1]-i*X[-i-1]) * ((fact_mod[N-1])//i))%MOD
    #temp = ((cumsum[i]-X[-i-1]-i*X[-i-1]) * ((fact_mod[N-1])//i))%MOD # 割り算悪さしてそう

    #temp1 = (cumsum_mod[i]-X[-i-1]-i*X[-i-1]) % MOD
    temp1 = (cumsum_mod[i]-((i+1)*X[-i-1])%MOD) % MOD

    temp2 = (temp1 * (fact_mod[N-1]))%MOD

    #temp3 = (temp2//i)%MOD
    temp3 = (temp2*inv_t[i])%MOD
    #temp3 = (temp2/i)%MOD # 771786913.0208511??

    #print(temp3)
    newans = (newans+temp3)%MOD

    #temp = ((cumsum[i]-X[N-i]-i*X[N-i]) * ((fact_mod[N-1])//i))%MOD
    # print(((fact_mod[N-1])//i))
    #print(cumsum[i]-X[N-i]-i*X[N-i])
    #print(cumsum[i]-X[-i]-i*X[-i])
    #ans = (ans + temp)%MOD

print(newans) # 556274646
