#include <bits/stdc++.h>
using namespace std;
const int maxn = (1 << 20) + 1, maxm = 1150;
const double pi = acos(-1.0);
const long long mod = 1000000007;
long long ksm(long long a, long long k) {
  long long r = 1;
  while (k > 0) {
    if (k & 1) r = r * a % mod;
    a = a * a % mod;
    k >>= 1;
  }
  return r;
}
int n, a[maxn], b[maxn];
long long p[maxn], pp[maxn], ans = 0;
int main() {
  int i, j, k, l;
  scanf("%d", &n);
  for (i = 0; i < n; i++) scanf("%d", a + i);
  for (i = 0; i < n; i++) scanf("%d", b + i);
  for (i = 0; i < n - 1; i++) {
    long long t = (b[i] - a[i] + 1) * 1LL * (b[i + 1] - a[i + 1] + 1) % mod;
    p[i] = ksm(t, mod - 2);
    int tt = min(b[i], b[i + 1]) - max(a[i], a[i + 1]) + 1;
    if (tt < 0) tt = 0;
    p[i] = (t + mod - tt) % mod * p[i] % mod;
  }
  for (i = 0; i < n - 2; i++) {
    pp[i] = (p[i] + p[i + 1] - 1 + mod) % mod;
    int tt = min(b[i], min(b[i + 1], b[i + 2])) -
             max(a[i], max(a[i + 1], a[i + 2])) + 1;
    if (tt < 0) tt = 0;
    long long t = (b[i] - a[i] + 1) * 1LL * (b[i + 1] - a[i + 1] + 1) % mod *
                  (b[i + 2] - a[i + 2] + 1) % mod;
    pp[i] = (pp[i] + ksm(t, mod - 2) * tt % mod) % mod;
  }
  long long tt = 0;
  for (i = 0; i < n - 1; i++)
    tt += p[i], tt %= mod, ans += mod - (p[i] * p[i] % mod), ans %= mod;
  ans += (1 + 3 * tt) % mod;
  ans += (tt * tt) % mod;
  ans %= mod;
  for (i = 0; i < n - 2; i++) {
    ans += 2 * pp[i] % mod;
    ans %= mod;
    ans += 2 * (mod - p[i] * p[i + 1] % mod) % mod;
    ans %= mod;
  }
  printf("%I64d\n", ans);
  return 0;
}
