var n,t,ans:int64; i,j:longint; gc:array[0..1000,0..1000]of int64; a:array[0..1000]of int64; f:array[0..1000,0..1000]of int64; function gcd(a,b:int64):int64; var t:longint; begin if b=0 then begin gcd:=a; exit; end; gcd:=gcd(b,a mod b); exit; end; procedure qsort(l,r:longint); var i,j,mid,t:longint; begin i:=l;j:=r;mid:=a[l+random(r-l+1)]; repeat while a[i]mid do dec(j); if i<=j then begin t:=a[i];a[i]:=a[j];a[j]:=t; inc(i);dec(j); end; until i>j; if i0 do begin dec(t); readln(n); for i:=1 to n do read(a[i]); qsort(1,n); ans:=0; fillchar(f,sizeof(f),0); f[0,0]:=1; for i:=0 to n-1 do begin for j:=0 to a[i] do if f[i,j]<>0 then begin inc(f[i+1,gc[a[i+1],j]],f[i,j]); inc(f[i+1,j],f[i,j]); f[i+1,j]:=f[i+1,j] mod 100000007; f[i+1,gc[a[i+1],j]]:=f[i+1,gc[a[i+1],j]] mod 100000007; end; f[i+1,0]:=1; end; for j:=0 to a[n] do ans:=(ans+j*f[n,j])mod 100000007; writeln(ans); end; end.