/*
题意:输入一组n长的序列ai,表示n个格子的各自能涂的颜色数,颜色为1~ai。求找出ai的一种
排列,使得所有颜色组合的sum和最大,sum表示一种颜色组合的片数,连续的相同颜色算一片,
输出最大的sum和
c=n*s-(s/min(b1,b2)+s/min(b2,b3)+...+s/min(bn-1,bn))
(a/b)%mod<-->(a%mod*pow(b,mod-2))%mod
*/
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
#define ll __int64
const int mod =1000000007;
const int maxn = 1000005;
ll a[maxn],b[maxn];
inline ll p(ll b)
{
ll t = mod-2;
ll res =1,x=b;
while(t)
{
if(t&1) res=(res*x)%mod;
x=(x*x)%mod;
t>>=1;
}
return res;
}
int main()
{
int t,n;
ll s,c;
scanf("%d",&t);
while(t--)
{
s=1;
c=0;
scanf("%d",&n);
for(int i=1;i<=n;++i)
{
scanf("%I64d",&a[i]);
s=(s*a[i])%mod;
}
sort(a+1,a+n+1);
for(int i=1,j=n;i<=j;i++,j--)
{
if(i!=j)b[2*i]=a[j];
b[2*i-1]=a[i];
}
for(int i=2;i<=n;++i)
{
if(i%2==0)
{
if(i==n) c+=p(b[i])*s;
else c+=2*s*p(b[i]);
c=c%mod;
}
}
c=(n*s-c)%mod;
if(c<0) c+=mod;
printf("%I64d\n",c);
}
}
09-14
09-14
09-14
09-14
09-14