#include <bits/stdc++.h>
using namespace std;
#define M 1000000007
#define ll long long
#define pb push_back
#define fo(i,N) for(int i = 0 ; i < N ; i++)
#define foo(i,x,N) for (int i = x; i < N ; i++)
#define fill(a,val) memset(a,val,sizeof(a))
#define fastio() ios_base::sync_with_stdio(false); cin.tie(NULL);
#define endl '\n'
#define ff first
#define ss second
#define MAX 200005
ll sum[MAX+5] = {0};
ll pcount[MAX+5] = {0};
ll prod[MAX+5] = {0};
ll scount[MAX+5] = {0};
int N;
ll query(ll bit[],int x)
{
ll ans = 0;
for(; x>0 ; x -= x&-x)
ans = (ans%M+bit[x]%M)%M;
return ans;
}
void update(ll bit[],int idx,ll val,int k)
{
for(; idx <= k; idx+= idx&-idx)
bit[idx] = (bit[idx]%M+val%M)%M;
}
int main()
{
int T;
cin >> T;
while ( T--)
{ fill(sum,0);
fill(pcount,0);
fill(prod,0);
fill(scount,0);
int N;
cin >> N;
pair <ll,int> arr[N];
// set <ll> s;
fo(i,N)
{
cin >> arr[i].ff;
// s.insert(arr[i]);
}
int m = 0;
fo(i,N)
{
cin >> arr[i].ss;
m = max(m,arr[i].ss);
}
// int index = 1;
// unordered_map <ll,int> mp;
// ll ans = 0;
// for ( auto it = s.begin();it != s.end();it++)
// {
// mp[*it] = index++;
// }
ll ans = 0;
sort(arr,arr+N);
ll tempsum;
ll tempcount;
ll tempprod;
ll temp;
fo(i,N)
{
tempsum = query(sum,arr[i].ss);
tempcount = query(pcount,arr[i].ss);
//cout << ((tempcount%M*(arr[i].ss%M*arr[i].ff%M)%M)%M) << " " << ((arr[i].ss%M*tempsum))%M << endl;
ans = (ans%M+(((tempcount%M*(arr[i].ss%M*arr[i].ff%M)%M)%M)- ((arr[i].ss%M*tempsum))%M)%M)%M;
if ( ans < 0) ans = ans+M;
tempprod = query(prod,m) - query(prod,arr[i].ss);
if ( tempprod < 0 ) tempprod += M;
temp = query(scount,m)-query(scount,arr[i].ss);
if ( temp <0 ) temp = temp+M;
//cout << "ans" << " " << ans << endl;
tempprod = ((temp%M*arr[i].ff%M)%M - tempprod%M)%M;
//cout << tempsum << " "<< tempcount << " "<< tempprod << endl;
ans = (ans%M+tempprod%M)%M;
if (ans <0) ans = ans+M;
update(sum,arr[i].ss,arr[i].ff%M,m);
update(pcount,arr[i].ss,1,m);
update(prod,arr[i].ss,(arr[i].ff%M*arr[i].ss)%M,m);
update(scount,arr[i].ss,arr[i].ss,m);
}
cout << ans%M << endl;
}
}