Need of maxpooling layer in CNN and confusion regarding output size & number of parameters
Question 1) Is my calculation for each case above correct?


No, it is not correct. The formula to calculate the spatial dimensions (height and width) of a (square shaped) convolutional layer is 

$$O = \frac{I - K + 2P}S + 1$$ with $I$ being the spatial input size, $K$ being the kernel size, $P$ the padding and $S$ the stride. For your two cases that is (assuming padding of $1$ since otherwise numbers won't fit later with pooling):

Case 1:


Layer 1: The spatial dimensions are $O_1 = \frac{28 - 3 + 2\cdot1}1 + 1 = 28$. So the total layer has size $height \cdot width \cdot depth = 28 \cdot 28 \cdot 20$. 
Layer 2: The second layer has $O_2 = \frac{28 - 3 + 2\cdot1}1 + 1 = 28$ with a total layer size of $height \cdot width \cdot depth = 28 \cdot 28 \cdot 40$.


With regards to parameters please note that does not refer to the size of a layer. Parameters are the variables which a neural net learns, i.e. weights and biases. There are $1 \cdot 20  \cdot 3  \cdot 3$ weights and $20$ biases for the first layer. And $20\cdot 40  \cdot 3  \cdot 3$ weights and $40$ biases for the second layer.

Case 2:

The sizes of the convolutional layer do not depend on the number of input channels. However, the number of parameters for the first layer increases to $2 \cdot 20  \cdot 3 \cdot 3$ while the number of biases remains unchanged. The second convolutional layer is not affected at all. 




  Question2) I have read that the purpose of maxpooling is to reduce the dimensionality of the feature map. In my case each maxpooling is of size 3 and stride 2. What does it mean by reducing the dimensionality and then what will be the size of the output from each layer upon considering that there is a maxpooling operation after each convolutional layer?


Typically convolutional layers do not change the spatial dimensions of the input. Instead pooling layers are used for that. Almost always pooling layers use a stride of 2 and have size 2x2 (i.e. the pooling does not overlap). So your example is quite uncommon since you use size 3x3. 

You can apply the same formula as above (assuming padding again - see footnote (1) for an explanation)

$O_{pool\text{ }1} = \frac{28 - 3 + 2\cdot0.5}2 + 1 = 14$

Since now the input to the second conv. layer has different spatial dimensions you would get:

$O_{CNN\text{ }2} = \frac{14 - 3 + 2\cdot1}1 + 1 = 14$

And finally:

$O_{pool\text{ }2} = \frac{14 - 3 + 2\cdot0.5}2 + 1 = 7$



Footnotes:

(1) The padding of $0.5$ is the average padding required in each spatial dimension. As an example, have a look at how the second maxpooling kernel scans an input (I have chosen the second one since the input is smaller and, therefore, easier to visualize). The input has width and height of $14$:



As you can see from the drawing the actual padding is only required on one side for height and width respectively. Therefore, the actually performed padding is 
$$padding_{width} = \frac{padding_{left} + padding_{right}}{2}=\frac{0 + 1}{2}=0.5$$

And the same numbers apply to the height. Accordingly, the actual padding is $(0.5, 0.5)$. 

Moreover, the drawing shows 7x7 dark blue squares (kernel centers). Which visualizes the calculations leading to an output of $pool_2$ with spatial dimensions of 7x7 ($O_{pool\text{ }2}=7$).