#include<bits/stdc++.h> usingnamespacestd; typedeflonglong ll; #ifndef ONLINE_JUDGE #define dbg(x...) do{cout << "\033[33;1m" << #x << "->" ; err(x);} while (0) voiderr(){cout << "\033[39;0m" << endl;} template<template<typename...> classT, typenamet, typename... A> voiderr(T<t> a, A... x){for (auto v: a) cout << v << ' '; err(x...);} template<typename T, typename... A> voiderr(T a, A... x){cout << a << ' '; err(x...);} #else #define dbg(...) #endif #define inf 1ll << 50
const ll mod = 1e9 + 7; ll Pow(ll a, ll b) { ll ans = 1; while (b) { if (b & 1) ans = ans * a % mod; a = a * a % mod; b >>= 1; } return ans; } constint N = 1e3 + 5; ll a[N], c[N]; template<classT> voidread(T& ret) { ret = 0; char c; while ((c = getchar()) > '9' || c < '0'); while (c >= '0' && c <= '9') { ret = ret * 10 + c - '0'; c = getchar(); } } intmain() { int n; ll inv2 = (mod + 1) / 2; while (~scanf("%d", &n)) { for (int i = 1; i <= n; i++) read(a[i]); ll ans = 0; for (int i = 1; i <= n; i++) { ll t = 1; for (int j = 1; j <= n; j++) { if (i == j) continue; ll x = a[j] * a[j] % mod - a[i] * a[i] % mod; x = (x + 2 * mod) % mod; t = t * Pow(x, mod - 2) % mod; } ans = (ans + t * Pow(a[i], mod - 2) % mod) % mod; } printf("%lld\n", ans * inv2 % mod); } return0; }