#include<bits/stdc++.h>
using namespace std;
int ans, N, M, mod = 1e9 + 7, a[200009], b[200009], fac[8009], inv[8009], dp[4009][4009];
int add (int x, int y) {int ans = x + y; if (ans >= mod) ans -= mod; return ans;}
int substract (int x, int y) {if (x >= y) return x - y; return x - y + mod;}
int mul (int x, int y) {return 1LL * x * y % mod;}
int pow (int a, int b)
{
int p = 1;
for (int i=0; (1<<i) <= b; i++)
{
if (b & (1 << i)) p = mul (p, a);
a = mul (a, a);
}
return p;
}
void Prec (int lim){fac[0] = inv[0] = 1;for (int i=1; i<=lim; i++)fac[i] = mul (fac[i - 1], i);
inv[lim] = pow (fac[lim], mod - 2);for (int i=lim - 1; i>=1; i--)inv[i] = mul (inv[i + 1], i + 1);}
int comb (int N, int K){int ans = mul (fac[N], inv[N - K]);ans = mul (ans, inv[K]);return ans;}
int main ()
{
//freopen ("input", "r", stdin);
//freopen ("output", "w", stdout);
scanf ("%d", &N), Prec (8000), M = 2000, ans = 0;
for (int i=1; i<=N; i++)
{
scanf ("%d %d", &a[i], &b[i]), dp[M + 1 - a[i]][M + 1 - b[i]] ++;
ans = substract (ans, comb (2 * a[i] + 2 * b[i], 2 * a[i]));
}
for (int i=1; i<=2 * M + 1; i++)
for (int j=1; j<=2 * M + 1; j++)
dp[i][j] = add (dp[i][j], add (dp[i - 1][j], dp[i][j - 1]));
for (int i=1; i<=N; i++)
ans = add (ans, dp[M + 1 + a[i]][M + 1 + b[i]]);
ans = mul (ans, pow (2, mod - 2));
printf ("%d\n", ans);
return 0;
}