#include <bits/stdc++.h>
using namespace std;
map<pair<long long, long long>, long long> m;
long long trav(long long a, long long b) {
  long long res = 0;
  long long x = max(a, b);
  long long y = min(a, b);
  a = x, b = y;
  while (a != b) {
    long long d = max(a, b);
    if (d == a)
      a /= 2;
    else
      b /= 2;
    res += m[{d, d / 2}];
  }
  return res;
}
void add(long long a, long long b, long long c) {
  long long x = max(a, b);
  long long y = min(a, b);
  a = x, b = y;
  while (a != b) {
    long long d = max(a, b);
    if (d == a)
      a /= 2;
    else
      b /= 2;
    m[{d, d / 2}] += c;
  }
}
int main() {
  long long n;
  cin >> n;
  for (int i = 0; i < n; i++) {
    long long type;
    cin >> type;
    long long res = 0;
    if (type == 1) {
      long long a, b, c;
      cin >> a >> b >> c;
      add(a, b, c);
    } else {
      long long a, b;
      cin >> a >> b;
      res = trav(a, b);
      cout << res << endl;
    }
  }
  return 0;
}
