#include #include #include #include using namespace std; #define mod 100000007 int dp[1009][1009],g[1009][1009]; long long ans; int n,a[1009],T; int gcd(int x,int y){ if (x==0) return y; return gcd(y %x,x); } int readint(){ int ch=getchar(),ret=0; while(ch<'0' || ch>'9') ch=getchar(); while(ch>='0' && ch<='9') ret=ret*10+ch-'0',ch=getchar(); return ret; } int main(){ // freopen(".in","r",stdin); for (int i=1;i<=1000;i++){ for (int j=1;j<=1000;j++){ g[i][j]=gcd(i,j); } g[0][i]=g[i][0]=i; } scanf("%d",&T); while(T--){ memset(dp,0,sizeof(dp)); scanf("%d",&n); ans=0; for (int i=1;i<=n;i++){ // scanf("%d",&a[i]); a[i]=readint(); } dp[0][0]=1; for (int i=1;i<=n;i++){ for (int j=0;j<=1000;j++){ if (!dp[i-1][j]) continue; dp[i][g[j][a[i]]]=(dp[i][g[j][a[i]]]+dp[i-1][j]); if (dp[i][g[j][a[i]]]>mod) dp[i][g[j][a[i]]]-=mod; dp[i][j]=(dp[i][j]+dp[i-1][j]); if (dp[i][j]>mod) dp[i][j]-=mod; } } for (register int i=1;i<=1000;i++){ ans+=(long long)i*dp[n][i]; ans%=mod; } printf("%I64d\n",ans); } // fprintf(stderr,"%.3f",(double)clock()/CLOCKS_PER_SEC); }