#include <bits/stdc++.h>
#define all(x) (x).begin(), (x).end()
#define rall(x) (x).rbegin(),(x).rend()
#define sz(x) (int)((x).size())
#define debug(x) cout << #x << ":" << x << ' ';
#define debugg(x) cout << #x << ":" << x << ' ' << "\n";
#define endl "\n"
#define L(X) ((X)<<1)
#define R(X) (((X)<<1)|1)
#define M(X,Y) (((X)+(Y))>>1)

using namespace std;
using ll = long long;
using ull = unsigned long long;
using pii = pair<int, int>;
using pll = pair<ll, ll>;

const int MAXN = 1e5 + 5;
const int MOD = 1e9 + 7;
const int INF = 0x3f3f3f3f;
const long long int LLINF = 0x3f3f3f3f3f3f3f3f;
const double EPS = 1e-9;
const double PI = acos(-1);

template<typename T>   T max_self(T& a, T b) { if (a < b) a = b; return a; }
template<typename T>   T min_self(T& a, T b) { if (a > b) a = b; return a; }
template<typename T>   T add(T x, T y) { return ((x % MOD)  + (y % MOD)) % MOD;}
template<typename T>   T mul(T x, T y) { return ((x % MOD) * (long long)(y % MOD)) % MOD;}
template<typename T>   T sub(T x, T y) { return add(x, -y + MOD);}
template<typename T>   T gcd(T a, T b) { return b ? gcd(b, a % b) : a;}
template<typename T>   T lcm(T a, T b) { return a / gcd(a, b) * b;}
template<typename T>   vector<T> read(vector<T>& v, int n) {v.resize(n); for (auto &x : v)cin >> x;}
template<typename T>   void trav(vector<T> &v) {for (int i = 0 ; i < (int)v.size() ; ++i) {cout << v[i]; if (i != (int)v.size() - 1) cout << ' ';}}
int lg2(long long x)   {   return 64 - __builtin_clzll(x) - 1;	}
int lg2(int x)   {   return 32 - __builtin_clz(x) - 1;	}


//Variables Declaration
typedef struct grb{
  int r=0;
  int g=0;
  int b=0;
}rgb;

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	int n;
  ull count=0;
  rgb table[4004];
  char RGB[4004];
	cin >> n;
  cin >>RGB;
  for(int i=0 ; i< n ; ++i){
    if(RGB[i]=='R')table[0].r++;
    else if(RGB[i]=='G')table[0].g++;
    else if(RGB[i]=='B')table[0].b++;
  }
  for (int i = 1; i < n; i++) {
    table[i].r=table[i-1].r;
    table[i].g=table[i-1].g;
    table[i].b=table[i-1].b;
    if(RGB[i-1]=='R'){if(table[i].r>0)table[i].r--;}
    else if(RGB[i-1]=='G'){if(table[i].g>0)table[i].g--;}
    else if(RGB[i-1]=='B'){if(table[i].b>0)table[i].b--;}
  }
  for (int i = 0; i < n; i++) {

    if (RGB[i] =='R') {
        for (int j = i+1; j < n; j++) {
              if(RGB[j] =='G')
              {
              count+=table[j].b;
              if(2*j-i<n && RGB[2*j-i] == 'B')
                count--;
              }
        }
        for (int j = i+1; j < n; j++) {
              if(RGB[j]=='B'){count+=table[j].g;
              if(2*j-i<n && RGB[2*j-i]=='G')
                count--;
              }
        }
    }

    if (RGB[i]=='G') {
      for (int j = i+1; j < n; j++) {
        if(RGB[j]=='B'){count+=table[j].r;
        if(2*j-i<n && RGB[2*j-i]=='R')count--;
        }
      }
      for (int j = i+1; j < n; j++) {
        if(RGB[j]=='R'){count+=table[j].b;
        if(2*j-i<n && RGB[2*j-i]=='B')count--;}
      }
    }

    if (RGB[i]=='B') {
      for (int j = i+1; j < n; j++) {
        if(RGB[j]=='G'){count+=table[j].r;
        if(2*j-i<n && RGB[2*j-i]=='R')count--;}
      }
      for (int j = i+1; j < n; j++) {
        if(RGB[j]=='R'){count+=table[j].g;
        if(2*j-i<n && RGB[2*j-i]=='G')count--;}
      }
    }

  }
  cout<<count<<endl;
	return 0;
}


Measured memory_bytes: 3672