#include #include #include #include using namespace std; using namespace atcoder; using Mint = modint1000000007; #define rep(i, n) for (int i = 0; i < (int)(n); i++) #define rrep(i, n) for (int i = (int)(n)-1; i >= 0; i--) #define rep2(i, a, b) for (int i = (int)a; i < (int)(b); i++) #define rrep2(i, a, b) for (int i = (int)(b)-1; i >= (int)(a); i--) using ll = long long; int main(){ int N; scanf("%d", &N); int A[N]; for(int i = 0; i < N; ++i) scanf("%d", A + i); int B[N]; for(int i = 0; i < N; ++i) scanf("%d", B + i); int order[N]; iota(order,order+N,0); sort(order,order+N,[&](int x, int y){return (ll)A[x]*(B[y]-1) < (ll)A[y]*(B[x]-1);}); Mint answer = 0, level = 1; rep(i, N){ answer += Mint::raw(A[order[i]])*level; level *= Mint::raw(B[order[i]]); } printf("%u\n", answer.val()); return 0; }