#include <bits/stdc++.h>
using namespace std;
const int kMaxN = 100000, kMaxM = 100000;
int n, m, x[kMaxN], _x[kMaxN];
int seq[kMaxN + kMaxM + 1], idx;
struct Command {
  int a, b, c;
} cmd[kMaxM];
struct Info {
  int sz;
  long long sum, val;
  Info() {}
  Info(int sz_, long long sum_, long long val_)
      : sz(sz_), sum(sum_), val(val_) {}
};
Info operator+(const Info &a, const Info &b) {
  return Info(a.sz + b.sz, a.sum + b.sum,
              a.val + b.val + b.sum * a.sz - a.sum * b.sz);
}
struct Node {
  Info info;
  Node *son[2];
  void update() { info = son[0]->info + son[1]->info; }
} node_pool[2 * (kMaxN + kMaxM + 1) - 1], *node_idx = node_pool, *root = NULL;
Node *BuildTree(int l, int r) {
  Node *res = node_idx++;
  if (l + 1 < r) {
    int mid = (l + r) >> 1;
    res->son[0] = BuildTree(l, mid);
    res->son[1] = BuildTree(mid, r);
  }
  return res;
}
void Insert(int x, int d, int v, Node *pos, int pos_l, int pos_r) {
  if (pos_l + 1 == pos_r) {
    pos->info.sz += d;
    if (pos->info.sz == 1) pos->info.sum = v, pos->info.val = 0;
    if (pos->info.sz == 0) pos->info.sum = 0, pos->info.val = 0;
    return;
  }
  int mid = (pos_l + pos_r) >> 1;
  if (x < mid)
    Insert(x, d, v, pos->son[0], pos_l, mid);
  else
    Insert(x, d, v, pos->son[1], mid, pos_r);
  pos->update();
}
Info Query(int l, int r, Node *pos, int pos_l, int pos_r) {
  if (l <= pos_l && r >= pos_r) return pos->info;
  int mid = (pos_l + pos_r) >> 1;
  if (l >= mid) return Query(l, r, pos->son[1], mid, pos_r);
  if (r <= mid) return Query(l, r, pos->son[0], pos_l, mid);
  return Query(l, r, pos->son[0], pos_l, mid) +
         Query(l, r, pos->son[1], mid, pos_r);
}
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; ++i) scanf("%d", &x[i]);
  scanf("%d", &m);
  for (int i = 0; i < m; ++i) {
    scanf("%d%d%d", &cmd[i].a, &cmd[i].b, &cmd[i].c);
    if (cmd[i].a == 1) --cmd[i].b;
  }
  memcpy(_x, x, sizeof(x));
  for (int i = 0; i < n; ++i) seq[idx++] = x[i];
  for (int i = 0; i < m; ++i)
    if (cmd[i].a == 1) {
      _x[cmd[i].b] += cmd[i].c;
      seq[idx++] = _x[cmd[i].b];
    }
  seq[idx++] = 2147483647;
  sort(seq, seq + idx);
  idx = unique(seq, seq + idx) - seq;
  root = BuildTree(0, idx);
  for (int i = 0; i < n; ++i)
    Insert(lower_bound(seq, seq + idx, x[i]) - seq, 1, x[i], root, 0, idx);
  for (int i = 0; i < m; ++i)
    if (cmd[i].a == 1) {
      Insert(lower_bound(seq, seq + idx, x[cmd[i].b]) - seq, -1, x[cmd[i].b],
             root, 0, idx);
      x[cmd[i].b] += cmd[i].c;
      Insert(lower_bound(seq, seq + idx, x[cmd[i].b]) - seq, 1, x[cmd[i].b],
             root, 0, idx);
    } else {
      int l = lower_bound(seq, seq + idx, cmd[i].b) - seq;
      int r = lower_bound(seq, seq + idx, cmd[i].c + 1) - seq;
      if (l < r)
        printf("%I64d\n", Query(l, r, root, 0, idx).val);
      else
        puts("0");
    }
  return 0;
}
