As already was said the code has undefined behaviour because the order of evaluation of function arguments are not specified and as the result applying of the side effects of postincrement operators are not sequenced in the deterministic way.
Howevrr I will explain the result.
Expression
cin>>a[i++]>>a[i++]>>a[i++];
is equivalent to the followiung expression if we will use functional notation
cin.operator >>( a[i++] ).operator >>( a[i++] ).operator >>( a[i++] );
The order of evaluation of function arguments are not specified. So some compilers evaluate arguments right to left while others - left to right.
It is obvious that your compiler evaluates function arguments right to left. The first is evaluated the argument of the right most function
cin.operator >>( a[i++] ).operator >>( a[i++] ).operator >>( a[0] );
After evaluation of the argument the compiler applies the side effect. i becomes equal to 1. Then the compiler evaluares the argument of the second function and you get
cin.operator >>( a[i++] ).operator >>( a[1] ).operator >>( a[0] );
And at last after evaluation the argument of the first function call there will be
cin.operator >>( a[2] ).operator >>( a[1] ).operator >>( a[0] );
and variable i will be equal to 3.
However as the order of evaluation of function arguments as I said are nor specified other compilers can represent this expression as
cin.operator >>( a[0] ).operator >>( a[1] ).operator >>( a[2] );
So the result can be different and the behaviour of the program is undefined.