def input_n
  gets.to_i               # 単一整数
end

def input_s
  gets.chomp              # 文字列。chompを付けないと改行文字がついてくる
end

def input_a
  gets.split.map(&:to_i)  # スペースで区切られた複数の整数
end

def input_o(num)
  num.times.map { gets.to_i }  # 縦に並んだ複数の整数。たまにある
end

def output_f(num)
  puts sprintf("%.12f", num)
end

n = input_n
a = input_a

sum = 0
mod = 10 ** 9 + 7
(a.length).times do |i|
  sum = (sum + a[i]) % mod
end
minus = 0
anser = 0
(a.length - 1).times do |i|
  minus = (minus + a[i]) % mod
  anser += (a[i] * (sum - minus)) % mod
end
puts anser % mod
