#include <bits/stdc++.h>
using namespace std;
map<pair<long long, long long>, long long> mpp;
void query(long long x, long long y) {
  long long i = x, j = y, ans = 0;
  while (i != j) {
    if (i > j) {
      ans += mpp[make_pair(i, i / 2)];
      i /= 2;
    } else {
      ans += mpp[make_pair(j, j / 2)];
      j /= 2;
    }
  }
  cout << ans << " " << endl;
  ;
}
void add(long long x, long long y, long long w) {
  long long i = x, j = y;
  while (i != j) {
    if (i > j) {
      mpp[make_pair(i, i / 2)] += w;
      mpp[make_pair(i / 2, i)] += w;
      i /= 2;
    } else {
      mpp[make_pair(j, j / 2)] += w;
      mpp[make_pair(j / 2, j)] += w;
      j /= 2;
    }
  }
}
int main() {
  int i, j, n, q, k;
  scanf("%d", &q);
  long long x, y, w;
  while (q--) {
    scanf("%d", &k);
    if (k == 1) {
      cin >> x >> y >> w;
      add(x, y, w);
    } else {
      cin >> x >> y;
      query(x, y);
    }
  }
}
