Convolution operator yields negative index of matrix
There are two approaches that can be taken:


Only use valid indices. Matrix C will then be smaller than matrix I, in your example it would be a 7x7 matrix (9 - 3 + 1 = 7). You may see this in neural network libraries as a convolution working with "valid" border.
Use synthetic values, usually just 0, for out-of-bounds indices in matrix I in order to calculate C. This produces the same size output as input, so some neural network libraries note this with "same" border.


Your formula suggests "same" border is being used*, because it would be unusual to work with a matrix C starting from an offset corner. If you do use "same" borders, it is important to normalise your input image data pixels to mean 0, otherwise the synthetic border will appear as a strong edge to the kernels.

If you are developing your own CNN code, I would suggest using "valid" border mode, because it is simpler, and a more common approach. It will work just fine for image classification tasks.



* Actually I think the formula you have posted is over-simplified or even wrong. I would expect to see the term $I(x+a,y+b)$ so that the top left index of C stays as (1,1) for a "valid" border. For a "same" border, I would expect to see a centered kernel.